home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: delta / whiteline CD Series - delta.iso / progtool / c / egem_210 / egem / source / rc_ob.s < prev    next >
Encoding:
Text File  |  1995-11-25  |  6.3 KB  |  432 lines

  1.  
  2.     globl ob_dostate,ob_undostate,ob_isstate
  3.     globl ob_doflag,ob_undoflag,ob_isflag
  4.     globl ob_xywh
  5.     globl ob_get_text,ob_set_text
  6.     globl ob_draw_dialog,ob_undraw_dialog
  7.  
  8.     globl rc_equal,rc_copy,rc_intersect,rc_inside,rc_grect_to_array,rc_array_to_grect
  9.     globl _center,_typetest,_dial
  10.  
  11.     globl form_center,form_dial
  12.     globl objc_draw
  13.  
  14.     globl vq_gdos
  15.  
  16. G_TEXT        = 21
  17. G_BOXTEXT    = 22
  18. G_USERDEF    = 24
  19. G_BUTTON    = 26
  20. G_STRING    = 28
  21. G_FTEXT     = 29
  22. G_FBOXTEXT    = 30
  23. G_TITLE     = 32
  24.  
  25. G_XTEXT     = ($0600|G_USERDEF)
  26.  
  27.  
  28. g_x         = 0
  29. g_y         = 2
  30. g_w         = 4
  31. g_h         = 6
  32.  
  33. xmin1        = -16
  34. ymin1        = -14
  35. xmin2        = -12
  36. ymin2        = -10
  37. xmax1        = -8
  38. ymax1        = -6
  39. xmax2        = -4
  40. ymax2        = -2
  41.  
  42.             TEXT
  43.  
  44. MODULE vq_gdos
  45.             pea        (a2)
  46.             moveq.l    #-2,d0
  47.             trap    #2
  48.             addq.l    #2,d0
  49.             move.l    (sp)+,a2
  50.             rts
  51. ENDMOD
  52.  
  53. MODULE ob_dostate
  54.             mulu.w    #24,d0
  55.             or.w    d1,10(a0,d0.l)
  56.             rts
  57. ENDMOD
  58.  
  59. MODULE ob_undostate
  60.             not.w    d1
  61.             mulu.w    #24,d0
  62.             and.w    d1,10(a0,d0.l)
  63.             rts
  64. ENDMOD
  65.  
  66. MODULE ob_isstate
  67.             mulu.w    #24,d0
  68.             move.w    d1,d2
  69.             and.w    10(a0,d0.l),d1
  70.             cmp.w    d1,d2
  71.             beq.b    flag_set
  72.  
  73.             moveq.l #0,d0
  74.             rts
  75.  
  76. flag_set:    moveq.l #1,d0
  77.             rts
  78. ENDMOD
  79.  
  80. MODULE ob_doflag
  81.             mulu.w    #24,d0
  82.             or.w    d1,8(a0,d0.l)
  83.             rts
  84. ENDMOD
  85.  
  86. MODULE ob_undoflag
  87.             not.w    d1
  88.             mulu.w    #24,d0
  89.             and.w    d1,8(a0,d0.l)
  90.             rts
  91. ENDMOD
  92.  
  93. MODULE ob_isflag
  94.             mulu.w    #24,d0
  95.             move.w    d1,d2
  96.             and.w    8(a0,d0.l),d1
  97.             cmp.w    d1,d2
  98.             beq.b    state_set
  99.  
  100.             moveq.l #0,d0
  101.             rts
  102.  
  103. state_set:    moveq.l #1,d0
  104.             rts
  105. ENDMOD
  106.  
  107. MODULE ob_xywh
  108.             mulu.w    #24,d0
  109.             move.l    16(a0,d0.l),(a1)+
  110.             move.l    20(a0,d0.l),(a1)
  111.             rts
  112. ENDMOD
  113.  
  114. MODULE ob_get_text
  115.             jsr     _typetest
  116.  
  117.             move.l    (a0),a0
  118.             tst.w    d1
  119.             beq.b    no_init
  120.  
  121.             clr.b    (a0)
  122. no_init:    rts
  123. ENDMOD
  124.  
  125. MODULE ob_set_text
  126.             jsr     _typetest
  127.             move.l    a1,(a0)
  128.             rts
  129. ENDMOD
  130.  
  131. MODULE _typetest
  132.             mulu.w    #24,d0
  133.             add.l    d0,a0
  134.             move.w    6(a0),d2
  135.  
  136.             cmp.b    #G_TEXT,d2
  137.             beq.b    text
  138.             cmp.b    #G_FTEXT,d2
  139.             beq.b    text
  140.             cmp.b    #G_BOXTEXT,d2
  141.             beq.b    text
  142.             cmp.b    #G_FBOXTEXT,d2
  143.             beq.b    text
  144.  
  145.             cmp.b    #G_STRING,d2
  146.             beq.b    string
  147.             cmp.b    #G_BUTTON,d2
  148.             beq.b    string
  149.             cmp.b    #G_TITLE,d2
  150.             beq.b    string
  151.  
  152.             and.w    #$3fff,d2    ; ~(G_MODAL|G_UNMODAL)
  153.             cmp.w    #G_XTEXT,d2
  154.             beq.b    userdef
  155.  
  156.             sub.l    a0,a0
  157.             addq.l    #4,sp
  158.             rts
  159.  
  160. text:        move.l    12(a0),a0
  161.             rts
  162.  
  163. string:     lea.l    12(a0),a0
  164.             rts
  165.  
  166. userdef:    move.l    12(a0),a0
  167.             move.l    4(a0),a0
  168.             rts
  169. ENDMOD
  170.  
  171.  
  172. MODULE ob_draw_dialog
  173.             link    a6,#-16
  174.             jsr     _center
  175.             clr.w    -2(a6)
  176.             bsr     _dial
  177.             move.w    -4(a6),d0
  178.             or.w    -6(a6),d0
  179.             or.w    -8(a6),d0
  180.             or.w    8(a6),d0
  181.             beq.b    no_grow
  182.  
  183.             move.w    #1,-2(a6)
  184.             jsr     _dial
  185.  
  186. no_grow:    lea.l    -16(a6),a1
  187.             move.l    (a1)+,-(sp)
  188.             move.w    (a1)+,-(sp)
  189.             move.w    (a1),d2
  190.             moveq.l #127,d1
  191.             moveq.l #0,d0
  192.             jsr     objc_draw
  193.             addq.l    #6,sp
  194.             unlk    a6
  195.             rts
  196. ENDMOD
  197.  
  198. MODULE ob_undraw_dialog
  199.             link    a6,#-16
  200.             jsr     _center
  201.             move.w    -4(a6),d0
  202.             or.w    -6(a6),d0
  203.             or.w    -8(a6),d0
  204.             or.w    8(a6),d0
  205.             beq.b    no_shrink
  206.  
  207.             move.w    #2,-2(a6)
  208.             jsr     _dial
  209.  
  210. no_shrink:    move.w    #3,-2(a6)
  211.             jsr     _dial
  212.             unlk    a6
  213.             rts
  214. ENDMOD
  215.  
  216. MODULE _center
  217.             move.w    d2,-8(a6)
  218.             move.w    d1,-6(a6)
  219.             move.w    d0,-4(a6)
  220.             pea     (a0)
  221.             lea.l    -10(a6),a1
  222.             pea     -16(a6)
  223.             pea     -14(a6)
  224.             pea     -12(a6)
  225.             jsr     form_center
  226.             lea.l    12(sp),sp
  227.             move.l    (sp)+,a0
  228.             rts
  229. ENDMOD
  230.  
  231. MODULE _dial
  232.             pea     (a0)
  233.             lea.l    -16(a6),a1
  234.             move.l    (a1)+,-(sp)
  235.             move.l    (a1),-(sp)
  236.             move.w    8(a6),-(sp)
  237.             move.w    -8(a6),-(sp)
  238.             move.w    -6(a6),d2
  239.             move.w    -4(a6),d1
  240.             move.w    -2(a6),d0
  241.             jsr     form_dial
  242.             lea.l    12(sp),sp
  243.             move.l    (sp)+,a0
  244.             rts
  245. ENDMOD
  246.  
  247. MODULE rc_equal
  248.             cmpm.l    (a0)+,(a1)+
  249.             bne.b    notequal
  250.  
  251.             cmpm.l    (a0)+,(a1)+
  252.             beq     equal
  253.  
  254. notequal:    moveq.l #0,d0
  255.             rts
  256.  
  257. equal:        moveq.l #1,d0
  258.             rts
  259. ENDMOD
  260.  
  261. MODULE rc_copy
  262.             move.l    (a0)+,(a1)+
  263.             move.l    (a0),(a1)
  264.             moveq.l    #0,d0
  265.             rts
  266. ENDMOD
  267.  
  268. MODULE rc_intersect
  269.             link    a6,#-16
  270.             move.w    g_y(a0),d0
  271.             cmp.w    g_y(a1),d0
  272.             bge.b    skip
  273.  
  274.             move.l    g_x(a0),xmin1(a6)
  275.  
  276.             move.w    g_x(a0),d0
  277.             add.w    g_w(a0),d0
  278.             move.w    d0,xmax1(a6)
  279.  
  280.             move.w    g_y(a0),d0
  281.             add.w    g_h(a0),d0
  282.             move.w    d0,ymax1(a6)
  283.             
  284.             move.l    g_x(a1),xmin2(a6)
  285.  
  286.             move.w    g_x(a1),d0
  287.             add.w    g_w(a1),d0
  288.             move.w    d0,xmax2(a6)
  289.  
  290.             move.w    g_y(a1),d0
  291.             add.w    g_h(a1),d0
  292.             move.w    d0,ymax2(a6)
  293.             bra.b    skp
  294.  
  295. skip:        move.l    g_x(a0),xmin2(a6)
  296.  
  297.             move.w    g_x(a0),d0
  298.             add.w    g_w(a0),d0
  299.             move.w    d0,xmax2(a6)
  300.  
  301.             move.w    g_y(a0),d0
  302.             add.w    g_h(a0),d0
  303.             move.w    d0,ymax2(a6)
  304.  
  305.             move.l    g_x(a1),xmin1(a6)
  306.  
  307.             move.w    g_x(a1),d0
  308.             add.w    g_w(a1),d0
  309.             move.w    d0,xmax1(a6)
  310.  
  311.             move.w    g_y(a1),d0
  312.             add.w    g_h(a1),d0
  313.             move.w    d0,ymax1(a6)
  314.  
  315. skp:        move.w    ymin2(a6),d0
  316.             cmp.w    ymax1(a6),d0
  317.             bge.b    ret
  318.  
  319.             move.w    xmin1(a6),d0
  320.             cmp.w    xmax2(a6),d0
  321.             bge.b    ret
  322.  
  323.             move.w    xmin2(a6),d0
  324.             cmp.w    xmax1(a6),d0
  325.             bge.b    ret
  326.  
  327.             move.w    xmin1(a6),d0
  328.             move.w    xmin2(a6),d1
  329.             cmp.w    d1,d0
  330.             bge.b    (*)+4
  331.  
  332.             move.w    d1,d0
  333.             move.w    d0,g_x(a1)
  334.             
  335.             move.w    ymin1(a6),d0
  336.             move.w    ymin2(a6),d1
  337.             cmp.w    d1,d0
  338.             bge.b    (*)+4
  339.             
  340.             move.w    d1,d0
  341.             move.w    d0,g_y(a1)
  342.             
  343.             move.w    xmax1(a6),d0
  344.             move.w    xmax2(a6),d1
  345.             cmp.w    d1,d0
  346.             blt.b    (*)+4
  347.             
  348.             move.w    d1,d0
  349.             move.w    d0,g_w(a1)
  350.             
  351.             move.w    ymax1(a6),d0
  352.             move.w    ymax2(a6),d1
  353.             cmp.w    d1,d0
  354.             blt.b    (*)+4
  355.  
  356.             move.w    d1,d0
  357.             move.w    d0,g_h(a1)
  358.  
  359.             move.w    g_x(a1),d0
  360.             sub.w    d0,g_w(a1)
  361.             move.w    g_y(a1),d0
  362.             sub.w    d0,g_h(a1)
  363.             
  364.             moveq.l    #1,d0
  365.             unlk    a6
  366.             rts
  367.  
  368. ret:        moveq.l    #0,d0
  369.             unlk    a6
  370.             rts
  371. ENDMOD
  372.  
  373. MODULE rc_inside
  374.             move.w    (a0)+,d2
  375.             cmp.w    d2,d0
  376.             blt.b    outside
  377.  
  378.             add.w    2(a0),d2
  379.             cmp.w    d2,d0
  380.             bge.b    outside
  381.  
  382.             move.w    (a0)+,d2
  383.             cmp.w    d2,d1
  384.             blt.b    outside
  385.  
  386.             add.w    2(a0),d2
  387.             cmp.w    d2,d1
  388.             bge.b    outside
  389.  
  390.             moveq.l #1,d0
  391.             rts
  392.  
  393. outside:    moveq.l #0,d0
  394.             rts
  395. ENDMOD
  396.  
  397. MODULE rc_grect_to_array
  398.             move.l    (a0)+,d0
  399.             move.l    d0,(a1)+
  400.  
  401.             swap    d0
  402.             add.w    (a0)+,d0
  403.             subq.w    #1,d0
  404.             move.w    d0,(a1)+
  405.  
  406.             swap    d0
  407.             add.w    (a0),d0
  408.             subq.w    #1,d0
  409.             move.w    d0,(a1)
  410.  
  411.             rts
  412. ENDMOD
  413.  
  414. MODULE rc_array_to_grect
  415.             move.l    (a0)+,d0
  416.             move.l    d0,(a1)+
  417.  
  418.             swap    d0
  419.             sub.w    (a0)+,d0
  420.             neg.w    d0
  421.             addq.w    #1,d0
  422.             move.w    d0,(a1)+
  423.  
  424.             swap    d0
  425.             sub.w    (a0),d0
  426.             neg.w    d0
  427.             addq.w    #1,d0
  428.             move.w    d0,(a1)
  429.  
  430.             rts
  431. ENDMOD
  432.